import axios from "axios"
import { ElMessage } from "element-plus"
import {useUserInfoStore} from '@/stores/user'
import router from "@/router"

// 进行根域名和超时时间的配置-------------------------------------
const httpInstance = axios.create({
    baseURL:'http://pcapi-xiaotuxian-front-devtest.itheima.net',
    timeout:15000 // 超时时间定位5秒 这个可以设置长一点 之前报错黑马服务接口有一部分原因 但是前端请求等待时间可以放长一点 5秒 网络卡顿可能服务器那边没问题 前端浏览器直接把请求ban了  直接去掉吧好 就这样吧 这都不行 那就是服务器有问题了 15秒还拿不到结果的话
})

// axios请求拦截器
httpInstance.interceptors.request.use(config => {
    // 1.从pinia获取token
    const userStore = useUserInfoStore()
    const token = (userStore.userInfo as any).token
    if(token){
        // 2.按照后端需求拼接token
        config.headers.Authorization = `Bearer ${token}`
    }
    return config
}, e => Promise.reject(e))

// axios响应式拦截器
httpInstance.interceptors.response.use(res => {
    /* 
        这里data.message是我举的一个栗子 具体什么字段看你们接口返回 也就是说我一会得改一下，是不 不行的话就改一下
    */
    const { status, data } = res
    switch (status) {
        case 200:
            return data
        case 401:
            // 全局处理登录失效 || 未登录
            ElMessage.error(data.message || '未登录或登录失效')
            return Promise.reject(data.message || '未登录或登录失效')
        case 403:
            // 全局处理没有权限
            ElMessage.error(data.message || '您没有相关权限')
            return Promise.reject(data.message || '您没有相关权限')
        case 500:
            // 全局处理服务器未知错误
            ElMessage.error(data.message || '服务器未知错误')
            return Promise.reject(data.message || '服务器未知错误')
        default:
            // 后端返回其他错误
            ElMessage.error(data.message)
            return Promise.reject(data.message)
    }
    // let data
    // try {
    //     data = res.data
    // } catch (error) {
    //     console.log(error)
    // }
    // if (data) {
    //     return data
    // }
    // return Promise.reject('服务器未知错误')
}, e => {
    const userStore = useUserInfoStore()
    console.log(e, 'error')
    // 统一错误提示
    ElMessage({
        type: 'warning',
        message:e.response? e.response.data.message : e.message
    })
    // 401状态码错误拦截
    if (!e.response) {
        return Promise.reject('未知错误')
    }
    if(e.response.status === 401){
        userStore.clearUserInfo()
        router.push('/login')
    }
    return Promise.reject(e)
})

export default httpInstance